from PIL import Image

# 使用颜色的十六进制格式
im = Image.new(mode='RGB', size=(100, 100), color="#ff0000")
# im.show()
# 查看尺寸
print("宽是%s高是%s" % (im.width, im.height))
# 或者通过size查看
print("图像的大小size:", im.size)
print("图像的格式:", im.format)
print("图像是否为只读:", im.readonly)
# 包括了每英寸像素点大小和截图软件信息
print("图像信息:", im.info)
print("图像模式信息:", im.mode)

im = Image.open("b.png")
# 此时返回一个新的image对象，转换图片模式
image = im.convert('RGB')
# 调用save()保存
image.save('a.jpg')

# from PIL import Image
#
# im = Image.open("th.png")
# try:
#     # 选择放大的局部位置，并选择图片重采样方式
#     # box四元组指的是像素坐标 (左,上,右,下)
#     # (0,0,120,180)，表示以原图的左上角为原点，选择宽和高分别是(120,180)的图像区域
#     image = im.resize(size=(550, 260), resample=Image.LANCZOS, box=(0, 0, 1, 1))
#     image.show()
#     # 保存
#     image.save("1放大图像.png")
#     print("查看新图像的尺寸", image.size)
# except IOError:
#     print("放大失败")


# im = Image.open("11.png")
# # 修改图像大小，以适应图像处理
# image = im.resize((450, 400))
# image.save("22.png")
# # 分离颜色通道，产生三个 Image对象
# r, g, b, e = image.split()
# r.show()
# g.show()
# b.show()
# e.show()


# from PIL import Image
#
# im = Image.open("1.jpg")
# # 修改图像大小，以适应图像处理
# image = im.resize((450, 400))
# image.save("2.jpg")
# # 分离颜色通道，产生三个 Image对象
# r, g, b = image.split()
# # 重新组合颜色通道，返回先的Image对象
# image_merge = Image.merge('RGB', (b, g, r))
# image_merge.show()
# # 保存图像至桌面
# image_merge.save("3.jpg")


from PIL import Image

# 打开图2.jpg
# im_1 = Image.open("11.png")
# im_2 = Image.open("da.png")
# # 因为两种图片的图片格式一致，所以仅需要处理图片的大小，让它们保持一致
# # 让 im_2 的图像尺寸与 im_1 一致,注意此处新生成了 Image 对象
# image = im_2.resize(im_1.size)
# # 接下来，对图像进行颜色分离操作
# r1, g1, b1, c1 = im_1.split()
# r2, g2, b2, c2 = image.split()
# # 合并图像
# im_3 = Image.merge('RGB', [r2, g1, b2])
# im_3.show()
# im_3.save("合成.jpg")

""""
混合 rgba模式的图像
"""
# im1 = Image.open("11.png")
# image = Image.open("th.png")
# im2 = image.resize(im1.size)
# # 设置 alpha 为 0.5
# imgs = Image.blend(im1, im2, 0.5)
# imgs.show()
# imgs.save("ff.png")


"""
裁剪图像
"""
# im = Image.open("11.png")
# box = (0, 0, 200, 100)
# im_crop = im.crop(box)
# im_crop.show()


# im = Image.open("11.png")
# # 复制一张图片副本
# im_copy = im.copy()
# # 对副本进行裁剪
# im_crop = im_copy.crop((0, 0, 200, 100))
# # 创建一个新的图像作为蒙版，L模式，单颜色值
# image_new = Image.new('L', (200, 100), 200)
# # 将裁剪后的副本粘贴至副本图像上，并添加蒙版
# im_copy.paste(im_crop, (100, 100, 300, 200), mask=image_new)
# # 显示粘贴后的图像
# im_copy.show()


# im = Image.open("ddf.png")
# # 返回一个新的Image对象
# # translate的参数值可以为负数，并将旋转图之外的区域填充为绿色
# # 返回同一个新的Image对象
# #设置图像大小250*250，并根据data的数据截取原图像的区域，生成新的图像
# im_out=im.transform((250,250),Image.EXTENT,data=[0,0,30 + im.width//4,im.height//3])
# im_out.show()
# im_out.save("水平翻转.png")

# 导入Image类和ImageFilter类
from PIL import Image, ImageFilter

# im = Image.open("美女.png")
# # 图像模糊处理
# im_blur = im.filter(ImageFilter.BLUR)
# im_blur.show()
# im_blur.save("模糊.png")

# im = Image.open("美女.png")
# #生成轮廓图
# im2=im.filter(ImageFilter.CONTOUR)
# im2.show()
# im2.save("轮廓图.png")


# im = Image.open("美女.png")
# # 边缘检测
# im3 = im.filter(ImageFilter.FIND_EDGES)
# im3.show()
# im3.save("边缘检测.png")

# im = Image.open("国宝.jpg")
# # 浮雕图
# im4 = im.filter(ImageFilter.EMBOSS)
# im4.show()
# im4.save("浮雕图.png")

# im = Image.open("美女.png")
# # 平滑图smooth
# im5 = im.filter(ImageFilter.SMOOTH)
# im5.show()
# im5.save("平滑图.png")


# from PIL import Image, ImageColor
#
# # getrgb()方法
# color1 = ImageColor.getrgb("blue")
# print(color1)
# color2 = ImageColor.getrgb('#DCDCDC')
# print(color2)
# # 使用HSL模式红色
# color3 = ImageColor.getrgb('HSL(0,100%,50%)')
# print(color3)
#
# color4 = ImageColor.getcolor('#EEA9B8', 'L')
# print(color4)
# color5 = ImageColor.getcolor('yellow', 'RGBA')
# print(color5)


from PIL import Image, ImageDraw

# 创建 Image 对象，当做背景图
# im = Image.new('RGB', (200, 200), color='gray')
# # 创建 ImageDraw 对象
# draw = ImageDraw.Draw(im)
# # 以左上角为原点，绘制矩形。元组坐标序列表示矩形的位置、大小；fill设置填充色为红色，outline设置边框线为黑色
# draw.rectangle((50, 100, 100, 150), fill=(255, 0, 0), outline=(0, 0, 0))
# # 查看原图片
# im.show()
# # 保存图片
# im.save("添加矩形图.png")

# from PIL import Image, ImageFont, ImageDraw
#
# # 打开图片，返回 Image对象
# im = Image.open("美女.png")
# # 创建画布对象
# draw = ImageDraw.Draw(im)
# # 加载计算机本地字体文件
# font = ImageFont.truetype('C:/Windows/Fonts/msyh.ttc', size=36)
# # 在原图像上添加文本
# draw.text(xy=(80, 50), text='漂亮', fill=(255, 0, 0), font=font)
# im.show()
# im.save("c.png")


"""
添加水印（函数式编程）
"""
# from PIL import Image, ImageFont, ImageDraw
#
# font = ImageFont.truetype('C:/Windows/Fonts/msyh.ttc', size=30)
#
#
# def creating_watermark(im, text, font=font):
#     # 给水印添加透明度，因此需要转换图片的格式
#     im_rgba = im.convert('RGBA')
#     im_text_canvas = Image.new('RGBA', im_rgba.size, (255, 255, 255, 0))
#     print(im_rgba.size[0])
#     draw = ImageDraw.Draw(im_text_canvas)
#     # 设置文本文字大小
#     text_x_width, text_y_height = draw.textsize(text, font=font)
#     print(text_x_width, text_y_height)
#     text_xy = (im_rgba.size[0] - text_x_width, im_rgba.size[1] - text_y_height)
#     print(text_xy)
#     # 设置文本颜色（绿色）和透明度（半透明）
#     draw.text(text_xy, text, font=font, fill=(255, 255, 255, 128))
#     # 将原图片与文字复合
#     im_text = Image.alpha_composite(im_rgba, im_text_canvas)
#     return im_text
#
#
# image = Image.open("美女.png")
# image.show()
# image_water = creating_watermark(image, '@爱你哟')
# image_water.show()
# image_water.save("爱你哟.png")


# # 导入相关的包
# from PIL import Image
# # 使用numpy之前需要提前安装
# import numpy as np
#
# # 创建 300*400的图像，3个颜色通道
# array = np.zeros([300, 400, 3], dtype=np.uint8)
# # rgb色彩模式
# array[:, :200] = [255, 0, 0]
# array[:, 200:] = [255, 255, 0]
# img = Image.fromarray(array)
# img.show()
# img.save("数组生成图像.png")


# from PIL import Image
# import numpy as np
#
# img = Image.open("美女.png")
# img.show()
# # Image图像转换为ndarray数组
# img_2 = np.array(img)
# print(img_2)
# # ndarray转换为Image图像
# arr_img = Image.fromarray(img_2)
# # 显示图片
# arr_img.show()
# # 保存图片
# arr_img.save("arr_img.png")


import os
from PIL import Image


def png_to_gif(png_path, gif_name):
    """png合成gif图像"""
    frames = []
    # 返回文件夹内的所有静态图的列表
    png_files = os.listdir(png_path)
    # 打印返回的列表
    print(png_files)
    # 读取文件内的静态图
    for frame_id in range(1, len(png_files) + 1):
        frame = Image.open(os.path.join(png_path, 'image%d.png' % frame_id))
        frames.append(frame)
    # 以第一张图片作为开始，将后续5张图片合并成 gif 动态图
    # 参数说明：
    # save_all 保存图像;transparency 设置透明背景色;duration 单位毫秒，动画持续时间，
    # loop=0 无限循环;disposal=2 恢复原背景颜色。参数详细说明，请参阅官方文档，网址见文章末尾处。
    frames[0].save(gif_name, save_all=True, append_images=frames[1:], transparency=0, duration=2000, loop=0, disposal=2)


# 调用函数，传入对应的参数
png_to_gif("img", 't.gif')
